package com.powerbank.device.service;

import com.powerbank.device.dto.DeviceAlertDTO;

import java.util.List;

/**
 * 设备监控和报警服务接口
 */
public interface DeviceMonitorService {

    /**
     * 检查设备健康状态
     *
     * @param deviceCode 设备编码
     * @return 是否健康
     */
    boolean checkDeviceHealth(String deviceCode);

    /**
     * 创建设备报警
     *
     * @param alert 报警信息
     */
    void createAlert(DeviceAlertDTO alert);

    /**
     * 获取设备报警列表
     *
     * @param deviceCode 设备编码
     * @param limit      返回数量限制
     * @return 报警列表
     */
    List<DeviceAlertDTO> getDeviceAlerts(String deviceCode, int limit);

    /**
     * 获取所有活跃报警
     *
     * @return 活跃报警列表
     */
    List<DeviceAlertDTO> getActiveAlerts();

    /**
     * 处理设备离线报警
     *
     * @param deviceCode 设备编码
     */
    void handleDeviceOfflineAlert(String deviceCode);

    /**
     * 处理设备故障报警
     *
     * @param deviceCode   设备编码
     * @param errorCode    错误代码
     * @param errorMessage 错误信息
     */
    void handleDeviceErrorAlert(String deviceCode, String errorCode, String errorMessage);

    /**
     * 处理设备电量低报警
     *
     * @param deviceCode   设备编码
     * @param batteryLevel 电量百分比
     */
    void handleLowBatteryAlert(String deviceCode, Integer batteryLevel);

    /**
     * 处理插槽故障报警
     *
     * @param deviceCode   设备编码
     * @param slotNo       插槽号
     * @param errorCode    错误代码
     * @param errorMessage 错误信息
     */
    void handleSlotErrorAlert(String deviceCode, Integer slotNo, String errorCode, String errorMessage);

    /**
     * 解除报警
     *
     * @param alertId 报警ID
     * @return 是否成功
     */
    boolean resolveAlert(String alertId);

    /**
     * 批量解除报警
     *
     * @param alertIds 报警ID列表
     * @return 成功解除的数量
     */
    int batchResolveAlerts(List<String> alertIds);

    /**
     * 启动设备监控
     */
    void startMonitoring();

    /**
     * 停止设备监控
     */
    void stopMonitoring();
}